package version2024.medium;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Scanner;

/**
 * @author sunhl
 * @Description: HJ41 称砝码  循环, 字符串, 哈希
 * @Date: created in 2024/12/30 星期一 16:28
 * @Modified By:
 */
public class HJ41_WeighsScale {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            // 砝码的种类数量
            int n = in.nextInt();

            // 砝码可以表示的重量集合, 利用set去重
            HashSet<Integer> set = new HashSet<>();
            set.add(0);

            // 每种砝码的重量
            int[] w = new int[n];
            for (int i = 0; i < n; i++) {
                w[i] = in.nextInt();
            }

            // 每种砝码的个数
            int[] nums = new int[n];
            for (int i = 0; i < n; i++) {
                nums[i] = in.nextInt();
            }

            // 遍历砝码种类
            for (int i = 0; i < n; i++) {
                // list用来保存单个种类砝码, 使用不同个数时的重量结果
                // list的使用可以认为是一种简单的动态规划思想
                List<Integer> list = new ArrayList<>();
                // add后list中保存有使用之前种类的重量结果
                list.addAll(set);
                // 遍历砝码种类下数量
                for (int j = 1; j <= nums[i]; j++) {
                    // 遍历list很关键, 每次都回头从第一个种类的重量结果开始重新加砝码
                    for (int k = 0; k < list.size(); k++) {
                        set.add(list.get(k) + w[i] * j);
                    }
                }
            }

            System.out.println(set.size());
        }
    }
}
